
/* **********************************************************************
版本: 2022.3.62f1
作者: wzz
日期: 2025-8-7
描述: 不要忘记添加描述哦~.~！
***********************************************************************/

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using TouchSocket.Core;
using UnityEngine;


public static class TestDataAdpter 
{

    public static void TestFixHead()
    {

    }

    public async static  void RunFixHead()
    {
        //Tcp适配器测试
        //bufferLength的作用是模拟tcp接收缓存区，例如：

        //发送数据为{0,1,2,3,4}时
        //当bufferLength=1时，会先接收一个字节，然后适配器判断无法解析，然后缓存，然后再接收下一个字节，直到成功解析。
        //该模式能很好的模拟网络很差的环境。
        //当bufferLength=8时，会先接收{0,1,2,3,4,0,1,2}，然后适配器判断解析前五字节，然后缓存后三字节，然后再接收下一个续包，直到解析结束

        for (int bufferLength = 1; bufferLength < 1024 * 10; bufferLength += 1024)
        {
            bool isSuccess = true;
            var data = new byte[] { 0, 1, 2, 3, 4 };
            SingleStreamDataAdapterTester tester = SingleStreamDataAdapterTester.CreateTester(new FixedHeaderPackageAdapter()
             , bufferLength, (byteBlock, requestInfo) =>
             {
                 //此处就是接收，如果是自定义适配器，可以将requestInfo强制转换为实际对象，然后判断数据的确定性
                 if (byteBlock.Length != 5 )
                 {
                     isSuccess = false;
                 }
                 return null;
             });

            //data是发送的数据，因为此处使用的是固定包头适配器，
            //发送前适配器会自动添加包头，所以，此处只发送数据即可。
            //如果测试的是自定义适配器，发送前没有封装的话，就需要自行构建发送数据。
            //随后的两个参数，10,10是测试次数，和期望次数，一般这两个值是相等的。
            //意为：本次数据将循环发送10次，且会接收10次。不然此处会一直阻塞。
            //最后一个参数是测试的最大超时时间。

            var time = tester.Run(data, 10, 10, 1000 * 10);
            await Task.Delay(1000);
            LogPro.DebugPro.LogWarning($"测试结束，状态:{isSuccess}，用时：{time}");
        }
        LogPro.DebugPro.LogWarning("测试结束");

    }

}

